#!/bin/sh

# Build the x86 and x64 versions of the TAP driver
# Requires the Windows DDK

# get version.nsi definitions
. autodefs/defs.sh

if [ -n "$DDKVER" ] && [ -d "/c/WINDDK/$DDKVER" ] ; then

# common declarations for all DDK build targets
. install-win32/ddk-common

# configure tap driver sources
MACRO="perl install-win32/macro.pl autodefs/defs.in"
IFDEF="perl install-win32/ifdef.pl"
rm -rf tap-win32/amd64
mkdir tap-win32/amd64
$MACRO <tap-win32/SOURCES.in >tap-win32/SOURCES
$MACRO <tap-win32/i386/OemWin2k.inf.in | $IFDEF >tap-win32/i386/OemWin2k.inf
$MACRO <tap-win32/i386/OemWin2k.inf.in | $IFDEF -DAMD64 >tap-win32/amd64/OemWin2k.inf

if [ -n "$PRODUCT_TAP_DEBUG" ] ; then
    w2ktarget="w2k c"
    amdtarget="chk $x64_tag WNET"
else
    w2ktarget="w2k f"
    amdtarget="fre $x64_tag WNET"
fi

if [ -z "$DRVBINSRC" ] ; then
    if [ -n "$TAP_BIN_AMD64" ]; then
	amdtarget=""
    fi

    cd tap-win32
    t=`pwd`
    cd ..

    for mode in "$w2ktarget" "$amdtarget"; do
	echo '**********' build TAP $mode
	cmd //c "C:\\WINDDK\\$DDKVER\\bin\\setenv.bat C:\\WINDDK\\$DDKVER $mode && cd `perl install-win32/dosname.pl $t` && build -cef"
	mv tap-win32/tapdrvr.cod "tap-win32/tapdrvr-$(echo $mode | tr ' ' '-').cod"
    done

    title openvpn-build &>/dev/null

    if [ -n "$TAP_BIN_AMD64" ]; then
	mkdir -p $t/amd64
	cp "$TAP_BIN_AMD64" $t/amd64
    fi

    # copy driver files into tap-win32/dist
    cd tap-win32
    rm -rf dist
    mkdir dist
    cd dist
    mkdir i386
    mkdir amd64
    cd i386
    x86=`pwd`
    cd ../amd64
    x64=`pwd`
    cd ../..
    cp i386/OemWin2k.inf $x86
    cp i386/*.sys $x86
    cp amd64/OemWin2k.inf $x64
    cp amd64/*.sys $x64
    out="TAP driver catalog file is undefined";
    echo "$out" >$x86/$PRODUCT_TAP_ID.cat
    echo "$out" >$x64/$PRODUCT_TAP_ID.cat
    cd ..
fi

# $DRVBINSRC, if defined, points to prebuilt TAP driver and
# tapinstall.exe.
mkdir $GENOUT &>/dev/null
rm -rf $GENOUT/driver
if [ -z "$DRVBINSRC" ] ; then
    # Get TAP drivers
    cp -a tap-win32/dist $GENOUT/driver

    # Sign TAP drivers
    if [ -d "$SIGNTOOL" ]; then
	$SIGNTOOL/signtap
    fi
else
    cp -a $DRVBINSRC/driver $GENOUT/driver
fi

# $DRVBINDEST, if defined, points to a destination directory
# where TAP driver and tapinstall.exe will be saved, to be used
# as a $DRVBINSRC in future builds.
if [ -n "$DRVBINDEST" ] ; then
    mkdir $DRVBINDEST &>/dev/null
    cp -a $GENOUT/driver $DRVBINDEST
fi

else
    echo Not building TAP driver -- DDK version $DDKVER NOT FOUND
fi
